﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Domain;
using System.Data.SqlClient;
using System.Data;


namespace DataAcess
{
    public class TipoHabitacionData
    {
        private string literalConexion;

        public TipoHabitacionData(string literalConexion)
        {
            this.literalConexion = literalConexion;
        }
   
        public LinkedList<TipoHabitacion> ObtenerTiposDeHabitacion()
        {

            String sqlSelect = "SELECT * FROM TipoHabitacion";

            SqlConnection conexion = new SqlConnection(literalConexion);
            SqlCommand comandoSeleccionar = new SqlCommand(sqlSelect, conexion);
            conexion.Open();
            SqlDataReader reader = comandoSeleccionar.ExecuteReader();
            LinkedList<TipoHabitacion> tiposHab = new LinkedList<TipoHabitacion>();

            while (reader.Read())
            {
                TipoHabitacion tipoHab = new TipoHabitacion();
                tipoHab.IdTipoHab = reader.GetInt32(0);
                tipoHab.IdImagen = reader.GetInt32(1);
                tipoHab.Descripcion = reader.GetString(2);
                tipoHab.Tipo = reader.GetString(3);
                tipoHab.Tarifa = (float)(reader.GetDouble(4));
                tiposHab.AddLast(tipoHab);
            }
            return tiposHab;
        }

        public TipoHabitacion ObtenerTipoHabitacion(int id_tipoHabitacion)
        {
            String sqlSelect = "SELECT * FROM TipoHabitacion WHERE id_tipoHabitacion=" + id_tipoHabitacion;

            SqlConnection conexion = new SqlConnection(literalConexion);
            SqlCommand comandoSeleccionar = new SqlCommand(sqlSelect, conexion);
            conexion.Open();
            SqlDataReader reader = comandoSeleccionar.ExecuteReader();
           TipoHabitacion tipoHabitacion = new TipoHabitacion();
            if (reader.Read())
            {
                tipoHabitacion.IdTipoHab = reader.GetInt32(0);
                tipoHabitacion.IdImagen = reader.GetInt32(1);
                tipoHabitacion.Descripcion = reader.GetString(2);
                tipoHabitacion.Tipo = reader.GetString(3);
                tipoHabitacion.Tarifa = (float)(reader.GetDouble(4));
            }
            return tipoHabitacion;
        }

        public void ActualizarTipoDeHabitacion(String descripcion, float tarifa, int idTipoHabitacion)
        {
            SqlConnection conexion = new SqlConnection(literalConexion);
            String sqlConsult = "Update TipoHabitacion SET descripcion='"+ descripcion+"' where id_tipoHabitacion=" + idTipoHabitacion;
            String sqlConsult2 = "Update TipoHabitacion SET tarifa="+tarifa+" where id_tipoHabitacion=" + idTipoHabitacion;
            SqlCommand sqlcommand = new SqlCommand(sqlConsult, conexion);
            SqlCommand sqlcommand2 = new SqlCommand(sqlConsult2, conexion);
            SqlParameter sqlParameterDescripcion = sqlcommand.Parameters.Add("descripcion", System.Data.SqlDbType.VarChar);
            SqlParameter sqlParameterTarifa = sqlcommand2.Parameters.Add("tarifa", System.Data.SqlDbType.Float);
            sqlParameterDescripcion.Value = descripcion;
            sqlParameterTarifa.Value = tarifa;
            conexion.Open();
            sqlcommand.ExecuteNonQuery();
            sqlcommand2.ExecuteNonQuery();
        }

        public Boolean VerificaTipoHabitacion(int idTipoHabitacion)
        {
            SqlConnection conexion = new SqlConnection();
            conexion.ConnectionString = literalConexion;
            Boolean bandera = false;
            SqlCommand cmdVerificaAdm = new SqlCommand();
            cmdVerificaAdm.CommandText = "VerificaTipoHabitacion";
            cmdVerificaAdm.Connection = conexion;
            cmdVerificaAdm.CommandType = CommandType.StoredProcedure;

            SqlParameterCollection parametros = cmdVerificaAdm.Parameters;
            parametros.Add(new SqlParameter("@idTipoHabitacion", idTipoHabitacion));
            SqlParameter valorRetornado = new SqlParameter();
            valorRetornado.Direction = ParameterDirection.ReturnValue;
            valorRetornado.DbType = DbType.Int32;
            valorRetornado.ParameterName = "@Valor_Retorno";
            parametros.Add(valorRetornado);

            conexion.Open();
            SqlTransaction transaccion = conexion.BeginTransaction();
            cmdVerificaAdm.Transaction = transaccion;
            try
            {
                cmdVerificaAdm.ExecuteNonQuery();
                int valorRetorno = Int32.Parse(cmdVerificaAdm.Parameters["@Valor_Retorno"].Value.ToString());
                if (valorRetorno == 1)
                    bandera = true;
                transaccion.Commit();

            }//fin del try
            catch (SqlException exc)
            {
                if (conexion != null)
                {
                    transaccion.Rollback();
                }
            }//fin del catch
            finally
            {
                if (conexion != null)
                {

                    conexion.Close();
                }
            }//finally

            return bandera;

        }//fin del metodo 
    }
}
